/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package bs.stock.web;

import bs.global.util.JsfUtil;
import bs.global.web.GenericBean;
import bs.stock.modelo.Producto;
import bs.stock.modelo.TipoProducto;
import bs.stock.modelo.UnidadMedida;
import bs.stock.rn.ProductoRN;
import bs.stock.rn.TipoProductoRN;
import bs.stock.rn.UnidadMedidaRN;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

/**
 *
 * @author Claudio
 */
@ManagedBean
@ViewScoped
public class ProductoBean extends GenericBean  {

    @EJB ProductoRN productoRN;
    @EJB TipoProductoRN tipoProductoRN;
    @EJB UnidadMedidaRN unidadMedidaRN;

    private Producto producto;
    private List<Producto> lista;

    private List<TipoProducto> tipos;
    private List<UnidadMedida> unidadMedidas;

    //private VistaAMB tipoVista;

    /** Creates a new instance of ProductoBean */
    public ProductoBean() {

        
    }

    @PostConstruct
    public void init(){

        try {
            titulo = "Productos";
            //tipoVista = GR_VistaAMB.LISTA;
            tipos = tipoProductoRN.getLista();
            unidadMedidas = unidadMedidaRN.getLista();
        } catch (Exception e) {

            JsfUtil.addErrorMessage("Error al iniciar bean: "+e.getMessage());
        }

    }

    
    public void nuevo() {

        if(producto!=null){
            guardar(false);
        }

//        tipoVista = GR_VistaAMB.DATO;
        producto = new Producto();
    }

    
    public void guardar(boolean nuevo) {
        try {
            if (!puedoGuardar()) {
                return;
            }
            productoRN.guardar(producto);
            JsfUtil.addInfoMessage("Los datos fueron guardados correctamente");

        } catch (Exception ex) {
            Logger.getLogger(ProductoBean.class.getName()).log(Level.SEVERE,
                    "Error al guardar producto", ex);
            JsfUtil.addErrorMessage("No es posible guardar los datos "+ ex.getMessage());
        }
    }

    public boolean puedoGuardar(){

        boolean todoOk = true;

        if(producto==null){
            JsfUtil.addErrorMessage("No existe producto selecionado a guardar");
            todoOk = false;
        }

        if(producto.getTipoProducto()==null){
            JsfUtil.addErrorMessage("Seleccione el tipo de producto");
            todoOk = false;
        }

        if(producto.getUnidadDeMedida()==null){
            JsfUtil.addErrorMessage("Seleccione la unidad de medida");
            todoOk = false;
        }

        return todoOk;

    }

    
    public void eliminar(Producto entidad) {
        JsfUtil.addWarningMessage("Función no implementada");
    }

    
    public void deBaja() {

        if(producto!=null){
            try {
                producto.getAuditoria().setDebaja("S");
                productoRN.guardar(producto);
                JsfUtil.addWarningMessage("El producto ha sido dado de baja");
            } catch (Exception ex) {
                Logger.getLogger(ProductoBean.class.getName()).log(Level.SEVERE, null, ex);
                JsfUtil.addErrorMessage("No es posible dar de baja el producto");
            }
        }

    }

    
    public void deBaja(Producto entidad) {

        if(entidad!=null){
            producto = entidad;
            deBaja();
        }
    }

    
    public void seleccionar(Producto entidad) {
        
//        tipoVista = GR_VistaAMB.DATO;
        producto = entidad;
    }

    
    public String verEntidad(Producto entidad) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    
    public void imprimirLista() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    
    public void imprimirEntidad() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    
    public void buscar(){

//        tipoVista = GR_VistaAMB.LISTA;

        try {
            if (busqueda == null) {
                busqueda = "";
            }

            lista = productoRN.getProductos(busqueda);

            if(lista.isEmpty()){
                JsfUtil.addWarningMessage("No se encontraron resultados");
            }

        } catch (Exception ex) {
            JsfUtil.addWarningMessage("Error: " + ex.getMessage());
            Logger.getLogger(ProductoBean.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public List<Producto> getLista() {
        return lista;
    }

    public void setLista(List<Producto> lista) {
        this.lista = lista;
    }

    public Producto getProducto() {
        return producto;
    }

    public void setProducto(Producto producto) {
        this.producto = producto;
    }

    public List<TipoProducto> getTipos() {
        return tipos;
    }

    public void setTipos(List<TipoProducto> tipos) {
        this.tipos = tipos;
    }

    public List<UnidadMedida> getUnidadMedidas() {
        return unidadMedidas;
    }

    public void setUnidadMedidas(List<UnidadMedida> unidadMedida) {
        this.unidadMedidas = unidadMedida;
    }
    
}
